﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Librerias;
using System.Data;
using System.IO;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;

namespace eCampusWeb
{
    public partial class Perfil : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {

                    DataTable tabla = new ENUsuario().dimeUsuarioSegunCorreo(Session["correo"].ToString());

                    if (tabla.Rows.Count > 0)
                    {
                        lbNombre.Text = tabla.Rows[0]["usuNombre"].ToString() + " " + tabla.Rows[0]["usuApellido1"].ToString() + " " + tabla.Rows[0]["usuApellido2"].ToString();
                        lbTipo.Text = (tabla.Rows[0]["usuTipo"].ToString() == "1" ? "Profesor" : "Alumno");
                        lbCorreo.Text = tabla.Rows[0]["usuCorreo"].ToString();
                        tbCorreo2.Text = tabla.Rows[0]["usuCorreoAlternativo"].ToString();
                        tbTelefono.Text = tabla.Rows[0]["usuTelefono"].ToString();
                        Image7.ImageUrl = "~" + tabla.Rows[0]["usuImagen"].ToString();
                        HiddenField1.Value = tabla.Rows[0]["usuClave"].ToString();
                    }
                    else
                    {
                    }
                }
                catch (Exception)
                {

                }
            }
            else Button1_Click(sender, e);
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            lbNombre.Text = FileUpload1.FileName;
        }

        private void SubirFichero()
        {
            //Separa la extensión del nombre del archivo para validarla
            string[] nomExt = this.FileUpload1.FileName.Split('.');
            string tipoFile = nomExt[nomExt.Length - 1];

            if ((tipoFile == "jpg") || (tipoFile == "png") || (tipoFile == "gif") || (tipoFile == "bmp"))
            {

                //  Si se cuenta con la extensión válida, procedemos a guardarla en el Servidor. FileUpload1.SaveAs solicita una cadena de texto con la ruta y el nombre del archivo. Server.MapPath("~/") determina la ruta de nuestra aplicación en el servidor. Si deseamos, le concatenamos otra carpeta, previamente creada

                Directory.CreateDirectory(Server.MapPath("~/") + "/Data/" + Session["correo"].ToString());

                string direccion = "/Data/" + Session["correo"].ToString() + "/" + this.FileUpload1.FileName;

                string dirAbsoluta = Server.MapPath("~/") + "Data\\" + Session["correo"].ToString() + "\\" + this.FileUpload1.FileName;


                this.FileUpload1.SaveAs(dirAbsoluta + "_aux");

                //Comprime la imagen

                System.Drawing.Image currentImage = System.Drawing.Image.FromFile(dirAbsoluta + "_aux");

                File.Delete(dirAbsoluta);

                Bitmap newImage = new Bitmap(currentImage, new Size(140, 125));
                newImage.Save(dirAbsoluta, ImageFormat.Jpeg);

                currentImage.Dispose();
                newImage.Dispose();



                new ENUsuario().SetImagen(Session["correo"].ToString(), direccion);

                File.Delete(dirAbsoluta + "_aux");
            }
            else throw new Exception("El formato de la imagen debe ser jpg, png, gif o bmp");
        }


        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (FileUpload1.HasFile) SubirFichero();

                //Elimina espacios y comprueba teléfono
                tbTelefono.Text = tbTelefono.Text.Replace(" ", "");
                try
                {
                    Convert.ToInt32(tbTelefono.Text);
                }
                catch (Exception)
                {
                    throw new Exception("El teléfono únicamente puede contener caracteres numéricos.");
                }

                //Comprueba correo
                if (!tbCorreo2.Text.Contains("@") || !tbCorreo2.Text.Contains("."))
                {
                    throw new Exception("Correo electrónico no válido.");
                }

                //Comprueba si se ha cambiado la contraseña
                if (tbPassAntiguo.Text != "" || tbPassNuevo1.Text != "" || tbPassNuevo2.Text != "")
                {
                    if (tbPassAntiguo.Text != HiddenField1.Value)
                    {
                        throw new Exception("La clave antigua no coincide.");
                    }
                    else if (tbPassNuevo1.Text.Length < 1)
                    {
                        throw new Exception("Introduzca la nueva clave.");
                    }
                    else if (tbPassNuevo1.Text != tbPassNuevo2.Text)
                    {
                        throw new Exception("Las claves nuevas no coinciden.");
                    }
                    
                    new ENUsuario().SetTelefonoYCorreoAlternativoYClave(Session["correo"].ToString(), tbTelefono.Text, tbCorreo2.Text, tbPassNuevo1.Text);
                }
                else
                {
                    new ENUsuario().SetTelefonoYCorreoAlternativo(Session["correo"].ToString(), tbTelefono.Text, tbCorreo2.Text);
                }

                Response.Redirect("~");

            }
            catch (Exception ex)
            {
                lbError.Text = ex.Message;
            }
        }

        /*
        protected void bt_agregar_Click(object sender, EventArgs e)
        {
        //Determinamos si se tiene un archivo que subir, una vez ya seleccionado.
        if (this.FileUpload1.HasFile)
        {
        
        //Variable que almacenará el nombre de la imagen
        string imagen = "";
        //Se separa la extensión del nombre del archivo para validarla
        string[] nomExt = this.FileUpload1.FileName.Split('.');
        string tipoFile = nomExt[nomExt.Length - 1];

        //Revisamos si el archivo cuenta con una extension valida, pudiendo agregar o quitar.
        if ((tipoFile == "jpg") || (tipoFile == "png"))
        {

            Si se cuenta con la extensión válida, procedemos a guardarla en el Servidor. FileUpload1.SaveAs solicita una cadena de texto con la ruta y el nombre del archivo. Server.MapPath("~/") determina la ruta de nuestra aplicación en el servidor. Si deseamos, le concatenamos otra carpeta, previamente creada

            this.FileUpload1.SaveAs(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);

            //Guardamos el nombre de la imagen
            imagen = this.FileUpload1.FileName;

            //Obtenemos su tamaño en bytes una vez que esta ya en el servidor
            System.IO.FileInfo info_img = new System.IO.FileInfo(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);

            //Lo convertimos a double y calculamos su peso en KB.
            double b_img = Convert.ToDouble(info_img.Length);

            //Limitamos el peso del archivo
            if (b_img <= (512*1024))
            {

            Si el tamaño es válido, codificamos la imagen en Base64, un previo antes de guardarla en la base de datos. Esto se hace mediante la funcion CodificarFoto. Le enviaremos a la funcion la ruta completa de la imagen en el Servidor. Nos retornara una variable con la imagen ya codificada en Base64
            string img_bin = CodificarFoto(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);

            Guardamos la informacion en la Base de Datos. La variable img_bin contiene la imagen, pero codificada en texto, lista para almacenarse en un campo de tipos Texto o String de la Base de Datos. En esta parte puedes utilizar el método que desees para guardarla

            //Si lo deseamos, borramos del servidor la imagen, una vez que ya esta en la BD
            File.Delete(Server.MapPath("~/") + "//moo//" + this.FileUpload1.FileName);
            }
            }
            }
        }w

      //  Ahora veamos la función para Codificar la Foto

        public string CodificarFoto(string sNombreArchivo)
        {
            //Variable para almacenar la imagen codificada
            string sBase64 = "";

            //Utilizamos un FileStream para acceder a la imagen en el Servidor
            FileStream fs = new FileStream(sNombreArchivo, FileMode.OpenOrCreate, FileAccess.Read);

            //Utilizamos un BinaryReader para pasar los datos de la imagen a un arreglo de bytes
            BinaryReader br = new BinaryReader(fs);
            byte[] bytes = new byte[(int)fs.Length];
            br.Read(bytes, 0, bytes.Length);

            //Guardamos el arreglo de bytes
            sBase64 = Convert.ToBase64String(bytes);

            //Retornamos la variable
            return sBase64;

            //Se libera memoria
            fs.Close();
            fs = null;
            br = null;
            bytes = null;
        }

     ///   Por ultimo les dejo el código para descodificar la imagen. Se entiende que ya se habrá leido la Base de Datos y recuperado la cadena (imagen codificada)

        private void DecodificarFoto(string sBase64, string nombre_file)
        {
        Guardamos en una cadena la ruta de la imagen donde se descodificará. Es decir, despues de este proceso, estara guardada en el disco duro del servidor
        string sImagenTemporal = Server.MapPath("~/") + "moo//" + nombre_file;

        //Utilizamos un FileStream para crear un nuevo archivo temporal
        FileStream fs = new FileStream(sImagenTemporal, FileMode.CreateNew, FileAccess.Write);

        //Un BinaryWriter para escribir la imagen descodificada
        BinaryWriter bw = new BinaryWriter(fs);

        //Un arreglo de Bytes para descodificar la imagen
        byte[] bytes;
        bytes = Convert.FromBase64String(sBase64);

        //Escribimos la imagen
        bw.Write(bytes);

        //Liberamos memoria
        fs.Close();
        bytes = null;
        bw = null;
        sBase64 = null;
        }
        */
    }
}